package com.wyl.netty.common.scanner;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author: wyl
 * @date: 2021/7/13
 * @des: 初始化时扫描自定义注解，拿到对应的类和方法
 * 把moduleValue + cmdValue的值与对应的反射对象 管理起来(使用map)
 * 封装 invoker 自定义反射方法
 */
public class InvokerTable {

    /**
     * 第一层key：module
     * 第二次key: cmd
     */
    private static ConcurrentHashMap<String, Map<String, Invoker>> invokerTable =
            new ConcurrentHashMap<String, Map<String, Invoker>>();

    /**
     * $addInvoker
     *
     * @param module
     * @param cmd
     * @param invoker
     */
    public static void addInvoker(String module, String cmd, Invoker invoker) {
        Map<String, Invoker> map = invokerTable.get(module);
        if (map == null) {
            map = new HashMap<String, Invoker>();
            invokerTable.put(module, map);
        }
        map.put(cmd, invoker);
    }

    /**
     * $getInvoker
     *
     * @param module
     * @param cmd
     * @return
     */
    public static Invoker getInvoker(String module, String cmd) {
        Map<String, Invoker> map = invokerTable.get(module);
        if (map != null) {
            return map.get(cmd);
        }
        return null;
    }
}
